class Solution
{
public:
  int compareVersion(string s1, string s2)
  {
    int i = 0, j = 0;
    while (i < s1.size() || j < s2.size())
    {
      // 从当前i的位置，往后递增到【非.】符号的位置
      int x = i;
      while (x < s1.size() && s1[x] != '.')
        x++;

      // 从当前j的位置，往后递增到【非.】符号的位置
      int y = j;
      while (y < s2.size() && s2[y] != '.')
        y++;

      // 得到 s1[i, x] 对应的数值
      int a = (i == x) ? 0 : atoi(s1.substr(i, x - i).c_str()); // i==x 说明 1..2 这样，中间是【没有】字符的，就是【0】

      // 得到 s2[j, y] 对应的数值
      int b = (j == y) ? 0 : atoi(s2.substr(j, y - j).c_str());

      // 如果 a > b 或者 a < b 直接返回结果，因为大小已经确定
      if (a > b)
      {
        return 1; // s1 > s2
      }
      else if (a < b)
      {
        return -1; // s1 < s2
      }

      // a == b 所以还需要继续【往后】比较下一位
      i = x + 1;
      j = y + 1;
    }

    return 0; // s1 == s2
  }
};
